package com.ruoyi.energy.service;

import java.util.List;
import java.util.Map;
import com.ruoyi.energy.domain.EmsEnergyReport;

/**
 * 能源报表Service接口
 * 
 * @author ruoyi
 * @date 2024-01-20
 */
public interface IEmsEnergyReportService {
    
    /**
     * 查询能源报表列表
     * 
     * @param emsEnergyReport 能源报表
     * @return 能源报表集合
     */
    public List<EmsEnergyReport> selectEmsEnergyReportList(EmsEnergyReport emsEnergyReport);

    /**
     * 新增能源报表
     * 
     * @param emsEnergyReport 能源报表
     * @return 结果
     */
    public int insertEmsEnergyReport(EmsEnergyReport emsEnergyReport);

    /**
     * 修改能源报表
     * 
     * @param emsEnergyReport 能源报表
     * @return 结果
     */
    public int updateEmsEnergyReport(EmsEnergyReport emsEnergyReport);

    /**
     * 批量删除能源报表
     * 
     * @param reportIds 需要删除的能源报表主键集合
     * @return 结果
     */
    public int deleteEmsEnergyReportByReportIds(Long[] reportIds);

    /**
     * 删除能源报表信息
     * 
     * @param reportId 能源报表主键
     * @return 结果
     */
    public int deleteEmsEnergyReportByReportId(Long reportId);

    /**
     * 根据日期范围查询能源报表
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param reportType 报表类型
     * @return 能源报表集合
     */
    public List<EmsEnergyReport> selectEmsEnergyReportByDateRange(String startDate, String endDate, String reportType);

    /**
     * 查询设备能耗趋势数据
     * 
     * @param deviceId 设备ID
     * @param reportType 报表类型
     * @param limit 查询限制条数
     * @return 趋势数据
     */
    public List<EmsEnergyReport> selectEnergyTrendByDevice(Long deviceId, String reportType, Integer limit);

    /**
     * 查询能耗排行榜
     * 
     * @param reportType 报表类型
     * @param reportDate 统计日期
     * @param limit 查询限制条数
     * @return 排行榜数据
     */
    public List<EmsEnergyReport> selectEnergyRanking(String reportType, String reportDate, Integer limit);

    /**
     * 查询综合统计数据
     * 
     * @param reportType 报表类型
     * @param reportDate 统计日期
     * @return 综合统计数据
     */
    public Map<String, Object> selectComprehensiveStats(String reportType, String reportDate);

    /**
     * 生成报表数据
     * 
     * @param reportType 报表类型（1日报 2周报 3月报 4年报）
     * @param reportDate 统计日期
     * @return 结果
     */
    public int generateReportData(String reportType, String reportDate);

    /**
     * 查询仪表盘统计数据
     * 
     * @return 仪表盘数据
     */
    public Map<String, Object> selectDashboardStats();
} 